package com.chen.service;

import com.chen.pojo.common.PageResult;
import com.chen.pojo.dto.TaskDto;
import com.chen.pojo.dto.TaskJobDto;
import com.chen.pojo.entry.TaskCollect;
import com.chen.pojo.entry.TaskDetails;
import com.chen.pojo.entry.TaskStatusType;
import com.chen.pojo.entry.TaskType;
import com.chen.pojo.vo.TaskReportVo;
import com.chen.pojo.vo.TaskVo;
import com.chen.pojo.vo.TaskWorkVo;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author chen
 * @version 1.0
 * @create_date 2025/8/20
 * 任务管理业务接口
 */
public interface TaskService {
    /**
     * 工单统计
     *
     * @param start 开始日期
     * @param end   结束日期
     * @return 统计结果
     */
    List<TaskReportVo> getTaskReportInfo(LocalDateTime start, LocalDateTime end);

    /**
     * 获取售货机维修次数
     *
     * @param start     开始日期
     * @param end       接收日期
     * @param innerCode 售货机编号
     * @return 维修次数
     */
    Long getRepairCount(LocalDate start, LocalDate end, String innerCode);

    /**
     * 工单搜索
     *
     * @param pageIndex 起始页
     * @param pageSize  页大小
     * @param taskCode  任务编号
     * @param status    任务状态
     * @param isRepair  是否是维修工单
     * @return 搜索结果
     */
    PageResult<TaskVo> searchList(Integer pageIndex, Integer pageSize, String taskCode, Integer status, Boolean isRepair);

    /**
     * 获取所有工单状态
     *
     * @return 结果
     */
    List<TaskStatusType> getAllTaskStatus();

    // 获取所有工单类型
    List<TaskType> getAllTaskType();

    // 查看工单详细
    TaskVo getTaskInfoById(String taskId);

    // 工单配置
    Boolean autoSupplyConfig(TaskJobDto taskJobDto);

    // 工单配置查询
    Integer supplyAlertValue();

    // 新增工单
    Boolean addTask(TaskDto taskDto);

    // 查询补货详情
    List<TaskDetails> getTaskDetails(String taskId);

    // 取消工单，更新工单状态未取消
    Boolean cancelTaskById(String taskId);

    // 工单状态统计
    List<TaskCollect> collectReport(LocalDate start, LocalDate end);

    // 人员排名
    List<TaskWorkVo> getUserWorkTop10(LocalDate start, LocalDate end, Boolean isRepair, String regionId);

    // 人员工作统计
    TaskWorkVo getUserWork(Integer userId, LocalDateTime start, LocalDateTime end);
}
